package com.cloud.bssp.jvm;

/**
 * @description： TODO
 * @author：weirx
 * @date：2021/6/1 17:12
 * @version：3.0
 */
public class IAddAddTest {

    public static void main(String[] args) {
        // 定义 i = 1，存入局部变量表
        int i = 1;
        // 取出局部变量表的i，压入操作数栈，在局部变量表执行++操作，所以局部变量表的i变成2，将操作数栈的i放回局部变量表，此时i仍然是1
        i = i++;
        // 定义j放入局部变量表，取出i放到操作数栈，此时i是1，局部变量表的i执行++变成2，将操作数栈的i赋值给j放入局部变量表，此时j是1,i是2
        int j = i++;
        // 定义k，取出i到操作数栈，此时i是2
        // 执行++，此时局部变量表的i变成3
        // 将第二个i压入操作数栈，此时i是3
        // 将第三个i压入操作数栈，此时i是3
        // 相乘得到9，在加上开始的2，将得到的11赋值给k
        int k = i + ++i * i++;
        System.out.println(i);
        System.out.println(j);
        System.out.println(k);

        System.out.println("********************************************************");

        int a = 100;
        int b = 200;
        // 将a压入操作数栈，局部变量表执行++操作，将a存入局部变量表，此时仍然是100
        a = a++;
        // 将b压入操作数栈，局部变量表执行--操作，将b存在局部变量表，此时仍然是100
        b = b--;
        // a压入操作数栈，此时a是100
        // 局部变量表执行++，此时a是101
        // 局部变量表执行--，此时a还是100
        // 将b压入操作数栈，此时b是200
        // 局部变量表的b执行++，变成201
        // 将b压入操作数栈，此时是201
        // 局部变量表的b执行--，此时是200
        // 最终，100 + 100 + 200 + 201  = 601
        int c = a++ + --a + b++ + b--;
        System.out.println(a);
        System.out.println(b);
        System.out.println(c);
    }
}
